Custom Control তৈরি (e.g., Owner-Drawn Control)

MFC Control এবং Component Customization - এমএফসি (MFC) - Microsoft Technologies

337

MFC (Microsoft Foundation Classes) এ Custom Control তৈরি করা মানে এমন একটি কন্ট্রোল ডিজাইন করা যা আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী কাস্টমাইজড এবং ড্রয়িং করা হয়। একটি সাধারণ উদাহরণ হলো Owner-Drawn Control, যা এমন কন্ট্রোল যা ব্যবহৃত অ্যাপ্লিকেশন দ্বারা ড্র করা হয়, অর্থাৎ কন্ট্রোলের চেহারা এবং আচরণ পুরোপুরি কাস্টমাইজ করা হয়।

Owner-Drawn Control তৈরি করার মাধ্যমে আপনি একটি কন্ট্রোলের (যেমন, বাটন, চেকবক্স, লিস্ট বক্স) আউটপুট কাস্টমভাবে ডিজাইন করতে পারেন। MFC তে এটি করতে WM_DRAWITEM মেসেজ ব্যবহার করা হয়, যা কন্ট্রোলের ড্রইং প্রক্রিয়াকে কাস্টমাইজ করতে সাহায্য করে।


Owner-Drawn Control তৈরি করার প্রক্রিয়া

Owner-Drawn Control তৈরি করার জন্য, সাধারণত কয়েকটি প্রধান পদক্ষেপ অনুসরণ করতে হয়:

  1. Control Creation: প্রথমে কন্ট্রোল তৈরি করতে হবে, যেমন একটি Button, ComboBox, বা ListBox। এই কন্ট্রোলকে "Owner-Draw" হিসেবে চিহ্নিত করতে হবে।
  2. Handle WM_DRAWITEM Message: কন্ট্রোলটি যখন ড্র হয়, তখন WM_DRAWITEM মেসেজটি ডেলিভার করা হয়। এই মেসেজটি ক্যাচ করে কাস্টম ড্রইং রুটিন তৈরি করতে হয়।
  3. Handle Drawing: কাস্টম ড্রইং করার জন্য, আপনি CDC অবজেক্ট ব্যবহার করবেন এবং প্রোগ্রাম অনুযায়ী কাস্টম রেন্ডারিং কোড লিখবেন।

উদাহরণ: Owner-Draw Button তৈরি

ধরা যাক, আপনি একটি কাস্টম Owner-Draw Button তৈরি করতে চান, যেটি রঙ এবং টেক্সট স্টাইল কাস্টমাইজ করবে।

Step 1: Button তৈরি করুন

প্রথমে Dialog Box বা উইন্ডোতে একটি বাটন যোগ করুন এবং এটি Owner-Draw হিসেবে চিহ্নিত করুন।

  1. Resource View এ গিয়ে Dialog নির্বাচন করুন।
  2. একটি Button কন্ট্রোল যোগ করুন।
  3. Properties এ গিয়ে বাটনের Style নির্বাচন করে Owner-Draw নির্বাচন করুন।

Step 2: WM_DRAWITEM মেসেজ হ্যান্ডল করা

এখন কোডে WM_DRAWITEM মেসেজ হ্যান্ডল করতে হবে। এই মেসেজটি OnDrawItem মেথডের মাধ্যমে হ্যান্ডল করা হয়।

void CMyDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    if (nIDCtl == IDC_MYBUTTON) // Check if it's the custom button
    {
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);  // Attach device context
        CRect rect = lpDrawItemStruct->rcItem; // Get the rectangle of the button

        // Draw background (e.g., light blue color)
        dc.FillSolidRect(rect, RGB(173, 216, 230));

        // Set the text color and font
        dc.SetTextColor(RGB(255, 0, 0));  // Red text
        CFont font;
        font.CreatePointFont(120, _T("Arial"));
        CFont* pOldFont = dc.SelectObject(&font);

        // Draw text in the center of the button
        CString strText;
        GetDlgItem(IDC_MYBUTTON)->GetWindowText(strText);
        dc.DrawText(strText, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

        // Restore old font
        dc.SelectObject(pOldFont);
    }
}

Step 3: Control Interaction

Owner-Draw Button-এর উপর ক্লিক করার সময় ইভেন্ট হ্যান্ডল করার জন্য, যেমন BN_CLICKED মেসেজ হ্যান্ডল করার জন্য, আপনি সাধারণভাবে ইভেন্ট হ্যান্ডলার ব্যবহার করবেন।

void CMyDialog::OnBnClickedMyButton()
{
    AfxMessageBox(_T("Owner-Draw Button Clicked"));
}

Owner-Draw Control এর ড্রইং পদ্ধতি

  • CDC (Device Context): ড্রইংয়ের জন্য, আপনি CDC অবজেক্ট ব্যবহার করবেন। এটি গ্রাফিক্স ড্র করার জন্য পেইন্টিং ডিভাইসের সাথে সংযোগ স্থাপন করে।
  • LPDRAWITEMSTRUCT: এই স্ট্রাকচারটি WM_DRAWITEM মেসেজের মাধ্যমে প্রাপ্ত হয় এবং এতে কন্ট্রোলের রেকটেঙ্গুলার অ্যারিয়া, ড্রইং স্টাইল এবং অন্যান্য তথ্য থাকে।
  • CFont, CPen, CBrush: কাস্টম ড্রইংয়ের জন্য বিভিন্ন গ্রাফিক্যাল অবজেক্ট ব্যবহার করা হয় যেমন কাস্টম ফন্ট, পেন (রেখা আঁকার জন্য), এবং ব্রাশ (পটভূমি পূর্ণ করার জন্য)।

সারাংশ

MFC তে Owner-Drawn Control তৈরি করা মানে আপনি একটি কন্ট্রোলের দৃশ্যমান আউটপুট কাস্টমাইজ করবেন। WM_DRAWITEM মেসেজ হ্যান্ডল করে, আপনি বিভিন্ন কন্ট্রোলের (যেমন, বাটন, চেকবক্স, লিস্ট বক্স) আউটপুট কাস্টমাইজ করতে পারেন। এই প্রক্রিয়াতে CDC অবজেক্ট ব্যবহার করে গ্রাফিক্যাল ড্রইং করা হয়, এবং আপনি কাস্টম পেন, ব্রাশ, ফন্ট ইত্যাদি ব্যবহার করে বিভিন্ন ডিজাইন তৈরি করতে পারেন। Owner-Drawn Control তৈরি করলে, আপনার অ্যাপ্লিকেশনের ইউজার ইন্টারফেসে আরও উন্নত এবং ইন্টারঅ্যাকটিভ কন্ট্রোল অন্তর্ভুক্ত করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...